約 4,062,395 件
https://w.atwiki.jp/aerocats/pages/66.html
/procとは /procの構成 実際に標準Linuxではどのような構成となっているか。 ファイルもしくはディレクトリ名 設定内容 buddyinfo buffalo/ bus/ cmdline cpu/ cpuinfo devices diskstats driver/ execdomains filesystems fs/ interrupts iomem ioports kallsyms kmsg loadavg locks mdstat meminfo misc modules mounts self/mountsのシンボリックリンク mtd mv_xor net/ partitions resource_dump scsi/ self 1405のシンボリックリンク slabinfo stat swaps sys/ sysvipc/ tty/ uptime version vmstat
https://w.atwiki.jp/aerocats/pages/51.html
標準Linuxの/usr/local/bin/内にある。 スクリプト #!/bin/sh # KURO-BOX/PRO shell script common routines. # Ver 1.002007/01/17 new by Y.H. # DEFAULT_IP=192.168.11.150 ENETNAME=eth0 #setup global environment values. MTD_SHARE=`grep extra /proc/mtd| sed -e "s/ .*//"` MTD_UIMAGE=`grep uImage /proc/mtd|sed -e "s/ .*//"` MTD_ROOTFS=`grep rootfs /proc/mtd|sed -e "s/ .*//"` MTD_UBOOT=mtd0 MTD_SHARE_DEV=/dev/${MTD_SHARE} MTD_UIMAGE_DEV=/dev/${MTD_UIMAGE} MTD_ROOTFS_DEV=/dev/${MTD_ROOTFS} MTD_RBOOT_DEV=/dev/${MTD_UBOOT} MTD_UIMAGE_CHARDEV_MINORNUM=`echo ${MTD_UIMAGE_DEV}|sed -e "s/.*mtd//"|sed -e "s/.*mtdblock//"` MTD_UIMAGE_CHARDEV=/dev/mtdchar${MTD_UIMAGE_CHARDEV_MINORNUM} MTD_ROOTFS_CHARDEV_MINORNUM=`echo ${MTD_ROOTFS_DEV}|sed -e "s/.*mtd//"|sed -e "s/.*mtdblock//"` MTD_ROOTFS_CHARDEV=/dev/mtdchar${MTD_ROOTFS_CHARDEV_MINORNUM} MTD_SHARE_CHARDEV_MINORNUM=`echo ${MTD_SHARE_DEV}|sed -e "s/.*mtd//"|sed -e "s/.*mtdblock//"` MTD_SHARE_CHARDEV=/dev/mtdchar${MTD_SHARE_CHARDEV_MINORNUM} DISK1_DEV=/dev/sda DISK2_DEV=/dev/sdb DISK1_MPT=/mnt/disk1 DISK2_MPT=/mnt/disk2 MTD_MPT=/mnt/mtd RAMDISK_MPT=/mnt/ram RAMDISK_DEV=/dev/ram1 RAMDISK_SIZE=8 KERNEL_EVENT_TAIL=/proc/buffalo/kernevnt FIRST_NAND=/etc/first_boot MICONAPL=/usr/local/sbin/miconapl HEXDUMP=/usr/bin/hexdump CHANGE_TO_DEVHDD_FILE=${MTD_MPT}/ChangeMeDevHDD SCSI_MAJOR=8 SCSI1_MINOR_BASE=0 SCSI2_MINOR_BASE=16 # $1 device of check target # retval # 1 device $1 is mounted. # 0 device $1 is not mounted. IsMounted(){ MOUNTED=`grep $1 /proc/mounts` if [ "${MOUNTED}" != "" ] ; then return 1 else return 0 fi return 0 } # $1 return value of evaluate target. DispSF(){ if [ "$1" -eq 0 ] ; then echo [Success] else echo [Failed ] fi } # $1 Executing shellscript. (mainly used for rcS) # $2 Option(default is start) exec_sh(){ if [ ! x"$2" = x"" ] ; then EXEC_OPT=$2 else EXEC_OPT=start fi echo "" echo "===== Starting $1 =====" /etc/init.d/$1 ${EXEC_OPT} DispSF $? echo "" } # $1 Check target mount point. CheckMPT(){ if [ "$1" != "" ] ; then echo "Checking MPT($1) is exist or not." if [ ! -e "$1" ] ; then echo "$1 not exist. So create a directory, now." mkdir $1 -p chmod 777 $1 else echo "$1 is exist. So no need to create a directory." fi else echo "Checking MPT target is something wrong." fi } create_sysfolder(){ rm -rf ${RAMDISK_MPT} mkdir -m 777 -p ${RAMDISK_MPT} mount -t tmpfs -o mode=1777,size=${RAMDISK_SIZE}m ${RAMDISK_DEV} ${RAMDISK_MPT} if [ $? -ne 0 ] ; then echo "*** ERROR! ${RAMDISK_MPT} mount fail!!" reboot -f fi mkdir -m 777 -p /mnt/ram/tmp /mnt/ram/var/tmp /mnt/ram/var/run rm -rf /tmp /var ln -sf /mnt/ram/tmp /tmp ln -sf /mnt/ram/var /var mkdir -m 777 -p /var/lock mkdir -m 755 -p /var/empty/sshd mkdir -m 755 -p /var/lib/dhcp mkdir -m 755 -p /var/lib/nfs chown rpcuser rpcuser /var/lib/nfs mkdir -m 755 -p /var/lock/subsys mkdir -m 755 -p /var/lock/perfmon mkdir -m 755 -p /var/lock/printing mkdir -m 755 -p /var/log/hotplug mkdir -m 755 -p /var/log/samba mkdir -m 755 -p /var/log/linkstation mkdir -m 755 -p /var/run/usb mkdir -m 755 -p /var/spool ln -s /etc/cron /var/spool/cron MODEL=`grep PRODUCTNAME /proc/buffalo/firmware|sed -e "s/PRODUCTNAME=//"` echo "KUROUTOSHIKOU KUROBOX Series ${MODEL}" /etc/issue ln -sf issue /etc/issue.net rm -f /var/lock/* } # $1 target device to format Format_EXT3(){ echo "***** Starting to format $1 *****" mkfs.ext3 $1 if [ $? -eq 0 ] ; then echo "Format is succeeded without error." else return 1 exit 1 fi return 0 } # $1 target device to format. Format_XFS(){ KEY=`dd if=$1 bs=1 count=3` if [ "${KEY}" = "XFS" ] ; then . /etc/melco/info if [ "${force_format}" = "yes" ] ; then echo "Disk (or partition) is looks like already formatted." echo "If you stop format, Press Ctrl+C in 10 seconds!!!" COUNTER=10 echo -n "waiting " while [ ${COUNTER} -gt 0 ] do echo -n "." sleep 1 COUNTER=$((${COUNTER} - 1)) done echo "" echo "OK, go on formatting." else return 0 fi fi echo "***** Cleaning Disk partition information *****" dd if=/dev/zero of=$1 bs=512 count=1 echo "***** Starting to format $1 *****" mkfs.xfs $1 -f if [ $? -eq 0 ] ; then echo "Format is succeeded without error." else return 1 exit 1 fi return 0 } # $1 target device to check partition # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) IsHavePartition(){ if [ -x ${HEXDUMP} ] ; then DISK_1_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "1p"|awk {print $10} ` DISK_2_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "2p"|awk {print $10} ` DISK_3_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "3p"|awk {print $10} ` DISK_4_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "4p"|awk {print $10} ` if [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -eq 0 -a "${DISK_3_PART_TAIL}" -eq 0 -a "${DISK_4_PART_TAIL}" -eq 0 ] ; then return 1 elif [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -ne 0 -a "${DISK_3_PART_TAIL}" -ne 0 -a "${DISK_4_PART_TAIL}" -ne 0 ] ; then return 2 else return 0 fi else return 0 fi return 0 } # $1 target device to mount. # $2 target mountpoint of $1. # $3 File system of target device(default is xfs). # $4 Mounted device permission(default is 777). MountShare(){ # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) if [ "$1" = "/dev/sda" -o "$1" = "/dev/sdb" ] ; then IsHavePartition $1 RET=$? [ "${RET}" -eq 1 ] TARGET_DEV=${1}1 [ "${RET}" -eq 2 ] TARGET_DEV=${1}4 [ "${RET}" -eq 0 ] TARGET_DEV=${1} else TARGET_DEV=$1 fi IsMounted ${TARGET_DEV} if [ $? = 1 ] ; then echo "${TARGET_DEV} is already mounted." return 1 fi if [ "$3" = "" ] ; then FS=xfs else FS=$3 fi if [ "$4" = "" ] ; then PERMISSION=777 else PERMISSION=$4 fi echo "Mounting ${TARGET_DEV} on $2 as a ${FS} file system." mount -t ${FS} ${TARGET_DEV} $2 case $? in 0) chmod ${PERMISSION} $2 echo "Success." ;; *) echo "Failed." return 1 ;; esac echo "" return 0 } MiconIntEnable(){ cat /proc/buffalo/miconint_en } CreateDevFile(){ DISK_DEV=$1 case ${DISK_DEV} in ${DISK1_DEV}) SCSI_MINOR_BASE=${SCSI1_MINOR_BASE} [ ! -e ${DISK_DEV} ] mknod ${DISK_DEV} b ${SCSI_MAJOR} ${SCSI_MINOR_BASE} ;; ${DISK2_DEV}) SCSI_MINOR_BASE=${SCSI2_MINOR_BASE} [ ! -e ${DISK_DEV} ] mknod ${DISK_DEV} b ${SCSI_MAJOR} ${SCSI_MINOR_BASE} ;; *) return -1 esac SCSI_MINOR=$((${SCSI_MINOR_BASE} + 1)) DEV_NO=1 while [ ${DEV_NO} -lt 8 ] do [ ! -e ${DISK_DEV}${DEV_NO} ] mknod ${DISK_DEV}${DEV_NO} b ${SCSI_MAJOR} ${SCSI_MINOR} DEV_NO=$((${DEV_NO} + 1)) SCSI_MINOR=$((${SCSI_MINOR} + 1)) done } lock_file(){ case $1 in check) [ -f "${LOCK}" ] echo "${THIS_SCRIPT} already runnign" return 1 ;; create) echo "${THIS_SCRIPT}" $2 ${LOCK} ;; delete) rm -f ${LOCK} ;; delete_log) rm -f ${LOCK}.log ;; *) ;; esac }
https://w.atwiki.jp/aerocats/pages/16.html
mountコマンドは、デバイスをLinuxの任意の地点に配置するというもの。 HDDをパーティション単位で好きな箇所にマウントする、USBメモリやCD/DVDドライブをマウントする、など、デバイスをファイルシステムとして取り扱う。 標準Linuxでのmountコマンド 概要 helpを表示してみる。 ~ # mount --help BusyBox v1.1.1 (2007.04.06-12 02+0000) multi-call binary Usage mount [flags] DEVICE NODE [-o options,more-options] Mount a filesystem. Filesystem autodetection requires /proc be mounted. Flags -a Mount all filesystems in fstab -o option One of many filesystem options, listed below -r Mount the filesystem read-only -t fs-type Specify the filesystem type -w Mount for reading and writing (default) Options for use with the "-o" flag async/sync Writes are asynchronous / synchronous atime/noatime Enable / disable updates to inode access times dev/nodev Allow use of special device files / disallow them exec/noexec Allow use of executable files / disallow them loop Ignored (loop devices are autodetected) suid/nosuid Allow set-user-id-root programs / disallow them remount Re-mount a mounted filesystem, changing its flags ro/rw Mount for read-only / read-write bind Bind a directory to an additional location move Relocate an existing mount point. There are EVEN MORE flags that are specific to each filesystem You ll have to see the written documentation for those filesystems ~ # 標準LinuxでのmountコマンドはBusyBoxが動作する。 コマンドの実行 HDD装着(未フォーマット) mountコマンドの実行結果は以下。 ~ # mount /dev/root on / type jffs2 (rw,noatime) proc on /proc type proc (rw,nodiratime) sysfs on /sys type sysfs (rw) usbfs on /proc/bus/usb type usbfs (rw) devpts on /dev/pts type devpts (rw) /dev/ram1 on /mnt/ram type tmpfs (rw) /dev/mtd3 on /mnt/mtd type jffs2 (rw,noatime) この出力を表にまとめてみる。 デバイス名 マウント先 タイプ マウントオプション /dev/root / jffs2 rw,noatime proc /proc proc rw,nodiratime sysfs /sys sysfs rw usbfs /proc/bus/usb usbfs rw devpts /dev/pts devpts rw /dev/ram1 /mnt/ram tmpfs rw /dev/mtd3 /mnt/mtd jffs2 rw,noatime
https://w.atwiki.jp/wiki1_itunes/pages/23.html
FAQ iTunes7に移行 Windows 7 では iTunesは正しく動ききません。 以上。
https://w.atwiki.jp/aerocats/pages/21.html
日経Linux2007年5月号(56ページ)より以下抜粋。 Linuxを形作るファイルは、役割ごとに/binや/homeなどあらかじめ定められたディレクトリに並んでいます。設定に関するファイルは/etc(スラエトセと読む)にあります。Linux自体の起動設定、ネットワーク設定、表示設定、個別のアプリケーション設定など、多岐にわたりますが、すべてがテキスト・ファイル形式で収められています。 テキストファイルで各種の設定 /etcには「設定」と名がつく作業に必要なファイルが集められている。 Linuxのありとあらゆるシステム設定に欠かせないファイルがあるため、新しいプログラムをインストールしても「/etcに設定ファイルがあるだろう」と容易に想像がつく。 FHSとの比較 標準Linux・開発用Linuxの/etc(スラエトセ)ディレクトリをFHSが定めた内容と比較してみる。 FHS 標準Linux 開発用Linux 設定内容 /etc/opt × /optに関する設定。 (/etc/X11) × X Window Systemに関する設定。 (/etc/sgml) × SGMLに関する設定。 (/etc/xml) × XMLに関する設定。 csh.login × Cシェルがログイン時に参照。 exports × NFSクライアントにアクセスを許す共有ディレクトリの一覧。 fstab ○ ファイルシステムのマウントポイント。 ftpusers × FTPアクセスを禁止するユーザー一覧。 gateways × 動的経路を設定するroutedコマンド?が参照。 gettydefs × loginコマンド?を呼び出すgettyコマンド?が通信速度と端末の設定時に参照。 group ○ ユーザーグループの定義。 host.conf × 名前解決(DNS)の際の優先順位を定義。 hosts ○ 名前解決のためのホスト名、IPアドレス設定。 hosts.allow × xinetd?経由で起動するサーバーのアクセス可能ホストを定義。 hosts.deny × xinetd?経由で起動するサーバーのアクセス拒否ホストを定義。 hosts.equiv × 外部からのリモートアクセスを許可するか否かを設定。 hosts.lpd × 外部からのリモートアクセスによる印刷を許可するか否かを設定。 inetd.conf × ポートを監視するinetd?に対象ポートと、アクセスを発見した場合に起動するプログラムを指示。 inittab ○ 起動時のランレベル?などを定義。 issue ○ ローカルログイン時の表示メッセージ。 id.so.conf × 共有ライブラリ?の検索パスを定義。 motd × コンソールログイン時の表示メッセージ。 mtab ○ マウント中のファイルシステム一覧。 mtools.conf × MS-DOSのディスクにアクセスするmtoolsコマンド群の設定。 networks × ブート時に用いるホスト名、IPアドレスの対応情報。 passwd ○ ユーザー名、ユーザーIDなどを記録。 printcap × プリンタの設定。 profile ○ ログイン時にbash?が参照・実行する設定。 protocols × プロトコルのデータベースであり、IPヘッダーに含まれるプロトコル種別を示す数値と特定のプロトコルを結び付ける。 resolv.conf ○ ホスト名とIPアドレスにおける名前解決の設定。 rpc × RPC(Remote Procedure Call)に用いるサーバー名とプロトコル番号の一覧。 securetty × rootがログインできるターミナルを指定。 services ○ ネットワークサービス名と利用ポート、プロトコルの対応を定義。 shells × ログインシェルとして利用可能なシェルを記述。 syslog.conf ○ ログデーモンであるsyslog?の設定。 ※引用「日経Linux2007年5月号(59ページ)」(日経BP社)
https://w.atwiki.jp/aerocats/pages/49.html
標準Linuxの/etc/init.d/内にある。 スクリプト スクリプト詳細configure関数 set_defaultGw関数 set_defaultIp関数 set_defaultIf関数 set_dns関数 start関数 stop関数 スクリプト本体 スクリプト #!/bin/sh # # start/stop network deamons # # DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking . /usr/local/bin/kuro_lib if [ -f /etc/netinfo ]; then . /etc/netinfo fi # for dhcpcd.exe export INTERFACE=$ENETNAME configure() { echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" if [ "$my_ipaddress" = "" ]; then my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= fi touch /etc/resolv.conf } set_defaultGw() { if [ "$my_dgw" = "" ]; then route del default else route add default gw $my_dgw fi } set_defaultIp() { echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 # delete default gw my_dgw= } set_defaultIf() { TMP=`cat /proc/net/route |awk {print $4} |grep 0003` if [ "$TMP" = "" ]; then echo "add default if" #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME fi } set_dns() { echo "Configuration resolv.conf" cat /dev/null /etc/resolv.conf if [ "$my_dns1" != "" ]; then echo "nameserver $my_dns1" /etc/resolv.conf fi if [ "$my_dns2" != "" ]; then echo "nameserver $my_dns2" /etc/resolv.conf fi } start() { configure /sbin/ifconfig lo up killall $BASE rm -f /etc/dhcpc/dhcpcd-eth0.pid # delete default gw while do /sbin/route del default if [ $? -ne 0 ]; then break fi done sleep 1 echo "Configuration network interface lo $ENETNAME" ## ## change mtu (frame-size 1518,4100,7418) ## if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi /sbin/ifconfig $ENETNAME mtu $mtu multicast if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi if [ "$my_ipaddress" = "dhcp" ]; then if [ "$my_dgw" != "" ]; then echo "--- set static dgw" DHCP_GW="-G $my_dgw" fi ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate ## echo "requesting DHCP tout=30[s]" $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME if [ $? -ne 0 ]; then echo "** dhcp fail" echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate set_defaultIp set_defaultGw # wait linkup delay sleep 4 fi else echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask if [ $? -ne 0 ]; then set_defaultIp fi set_defaultGw set_dns fi ## set_defaultIf ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh #/usr/local/bin/change_notify.sh network } stop() { echo "Deconfiguration network interface lo $ENETNAME" killall $BASE /sbin/ifconfig $ENETNAME down /sbin/ifconfig lo down } # for NFS TMP=`grep /dev/root /proc/mounts|grep nfs` if [ "$TMP" != "" ]; then echo "nfs root mode. skip $ENETNAME network configuration." exit 0 fi # lock_file check lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0 スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh # # start/stop network deamons # # シェルにshを指定。ネットワークデーモンの開始/停止のコメント。 DHCPCD=/sbin/dhcpcd BASE=`basename $DHCPCD` LOCK=/var/lock/networking DHCPCDという変数を用意し、そこに/sbin/dhcpcdを代入。 BASEという変数を用意し、そこに basename /sbin/dhcpcd を代入。 LOCKという変数を用意し、そこに/var/lock/networkingを代入。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで走らせる。 kuro_lib内の DEFAULT_IP変数(=192.168.11.150) ENETNAME変数(=eth0) lock_file関数 を使用するためだ。 if [ -f /etc/netinfo ]; then /etc/netinfoが存在すれば(/etcにnetinfoというファイルがあれば)以下を実行。 . /etc/netinfo /etc/netinfoをサブシェルで走らせる。 netinfo内の my_ipaddress変数 my_subnetmask変数 my_dgw変数 my_dns1変数 my_dns2変数 mtu変数 を使用するためだ。 fi /etc/netinfoの存在の有無の条件分岐を終了。 # for dhcpcd.exe /etc/dhcpc/dhcpcd.exeのために、というコメント。 export INTERFACE=$ENETNAME 環境変数を設定するexportコマンドで、INTERFACE変数にeth0を代入している。 ここからは7つの関数の記述になる。 configure関数 configure() { configure関数の定義が始まる。 echo "create network files.." echo "IP=[$my_ipaddress], netmask=[$my_subnetmask], dgw=[$my_dgw], dns1=[$my_dns1], dns2=[$my_dns2]" 画面に create network files.. IP=[IPアドレス値], netmask=[ネットマスク値], dgw=[デフォルトゲートウェイ値], dns1=[DNS1値], dns2=[DNS2値] と表示される。 if [ "$my_ipaddress" = "" ]; then my_ipaddress変数に何も設定されていなければ以下を実行。 my_ipaddress=$DEFAULT_IP my_subnetmask=255.255.255.0 my_dgw= my_ipaddress変数にDEFAULT_IP変数の値、my_subnetmask変数に255.255.255.0、my_dgw変数は空、とそれぞれの変数に値を代入。 fi my_ipaddress変数が空かどうかの条件分岐を終了。 touch /etc/resolv.conf /etcにresolv.confというファイルを作成。 } configure関数はここまで。 set_defaultGw関数 set_defaultGw() { set_defaultGw関数の定義ここから。 if [ "$my_dgw" = "" ]; then my_dgw変数が空であれば以下を実行。 route del default routeコマンド?でデフォルト経路情報を削除。 デフォルト経路とは、自分の経路情報に記録されていない宛て先のパケットを送るためのものだ。 一般的にはルーターを指す。 else my_dgw変数が空でなければ以下を実行。 route add default gw $my_dgw routeコマンド?で、デフォルト経路としてmy_dgw変数の内容を経路テーブルに追加。 fi my_dgw変数が空かどうかの条件分岐を終了。 } set_defaultGw関数はここまで。 set_defaultIp関数 set_defaultIp() { set_defaultIp関数はここから。 echo "** setting default ip" /sbin/ifconfig $ENETNAME $DEFAULT_IP netmask 255.255.255.0 画面上に「** setting default ip」と表示。 ifconfigコマンド?でeth0にDEFAULT_IP変数の値とnetmaskを255.255.255.0を設定。 # delete default gw my_dgw= デフォルトゲートウェイを削除する、というコメントの後にmy_dgw変数に空を代入している。 } set_defaultIp関数はここまで。 set_defaultIf関数 set_defaultIf() { set_defaultIf関数はここから。 TMP=`cat /proc/net/route |awk {print $4} |grep 0003` TMPという変数を用意して、そこに「cat /proc/net/route |awk {print $4} |grep 0003」の結果を代入している。 3つの命令をパイプでつないでいるのだが、ひとつづつ見てみる。 cat /proc/net/route /proc/net/routeを読み込んで次の命令に渡す。 この/procにはprocファイルシステムがマウントされていて、カーネルの各種統計情報を閲覧することができるが、/proc/net/routeにはIP経路情報が記載されている。 このコマンドを実行してみると Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 0001A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0 eth0 00000000 0101A8C0 0003 0 0 0 00000000 0 0 0 というように出力された。 awk {print $4} awkコマンド?で第4パラメータを抜き取って次の命令へ。 第4パラメータとは、上の表から「Flags」のことだとわかる。 grep 0003 「0003」という文字列を検索している。 実際に「0003」という文字列があったので、この場合、TMP変数には「0003」と入る。 フラグ「0003」とは「経路は有効でゲートウェイを使用する」という内容だ。 今の例で言うなら、宛て先が「0.0.0.0/0」なので選ばれた経路はデフォルト経路である。 つまり、この一連の命令は「デフォルト経路をeth0が持っているかどうか」を調べていたのだ。 なければ空白が入る。 if [ "$TMP" = "" ]; then TMP変数が空なら以下を実行。 echo "add default if" 画面に「add default if」と表示。 #route add -net 255.255.255.255 netmask 255.255.255.255 $ENETNAME route add -net default $ENETNAME routeコマンド?でeth0経由のネットワーク255.255.255.255を追加する、はコメントアウトされ、routeコマンド?でeth0にデフォルト経路を追加している。 コメントアウトされている255.255.255.255/32の経路情報は「ローカルブロードキャスト」と呼ばれるもので、ルーターを超えないLAN内に一斉にパケットを送信する手段である。 fi TMP変数の内容の条件分岐を終了する。 } set_defaultIf関数はここまで。 set_dns関数 set_dns() { set_dns関数はここから。 echo "Configuration resolv.conf" 画面に「Configuration resolv.conf」と表示する。 cat /dev/null /etc/resolv.conf /etc/resolv.confの内容を消去している。 if [ "$my_dns1" != "" ]; then my_dns1変数が空でなければ以下を実行。 echo "nameserver $my_dns1" /etc/resolv.conf 「nameserver my_dns1変数の値」を/etc/resolv.confに追記。 fi my_dns1変数が空かどうかの条件分岐を抜ける。 if [ "$my_dns2" != "" ]; then my_dns2変数が空でなければ以下を実行。 echo "nameserver $my_dns2" /etc/resolv.conf 「nameserver my_dns2変数の値」を/etc/resolv.confに追記。 fi my_dns2変数が空かどうかの条件分岐を終了する。 } set_dns関数はここまで。 start関数 start() { start関数の定義が始まる。 configure configure関数の実行。 /sbin/ifconfig lo up ifconfigコマンド?でlo(ループバック)デバイスを始動する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 rm -f /etc/dhcpc/dhcpcd-eth0.pid /etc/dhcpc/dhcpcd-eth0.pidをrmコマンド?で消去する。 # delete default gw デフォルトゲートウェイを削除する、とのコメント。 while do /sbin/route del default if [ $? -ne 0 ]; then break fi done while文による無限ループだ。 /sbin/route del default routeコマンド?でデフォルト経路を削除し if [ $? -ne 0 ]; then break fi routeコマンド?がエラーの終了ステータス「1」を返すまでbreak文でループから抜けられない。 sleep 1 1秒数えたあと echo "Configuration network interface lo $ENETNAME" 画面上に「Configuration network interface lo eth0」と表示。 ## ## change mtu (frame-size 1518,4100,7418) ## mtuの変更、とのコメント。 if [ "$mtu" = "4102" ] ; then mtu=4084 elif [ "$mtu" = "7422" ] ; then mtu=7404 elif [ "$mtu" = "9694" ] ; then mtu=9676 else mtu=1500 fi mtu変数が 4102であればmtu変数に4084を代入 7422であればmtu変数に7404を代入 9694であればmtu変数に9676を代入 それ以外ならmtu変数に1500を代入 という内容だ。 /sbin/ifconfig $ENETNAME mtu $mtu multicast ifconfigコマンド?でeth0のmtuを上で判別した値に設定しマルチキャストフラグを立てる。 if [ $? -ne 0 ]; then echo "mtu fail" /sbin/ifconfig $ENETNAME mtu 1500 multicast fi ifconfigコマンド?がエラーの場合、画面上に「mtu fail」と表示し、eth0のmtuを1500に設定しマルチキャストフラグを立てる。 if [ "$my_ipaddress" = "dhcp" ]; then my_ipaddress変数が「dhcp」であれば以下を実行。 if [ "$my_dgw" != "" ]; then my_dgw変数が空でなければ以下を実行。 echo "--- set static dgw" DHCP_GW="-G $my_dgw" 画面上に「--- set static dgw」と表示。 DHCP_GWという変数を用意し、「-G $my_dgw」を代入。 fi my_dgw変数が空かどうかの条件分岐を終了する。 ## see also /etc/dhcpc/dhcpcd.exe echo "DHCPCSTATE=requesting" /var/tmp/dhcpcstate /etc/dhcpc/dhcpcd.exeを参照、とのコメント。 /var/tmp/dhcpcstateに「DHCPCSTATE=requesting」を書き込み。 ## echo "requesting DHCP tout=30[s]" 画面上に「requesting DHCP tout=30[s]」と表示する。 $DHCPCD -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 $ENETNAME /sbin/dhcpcd -L /etc/dhcpc -h `hostname` $DHCP_GW -t 15 eth0 を実行。 if [ $? -ne 0 ]; then エラーが返れば以下を実行。 echo "** dhcp fail" 画面上に「** dhcp fail」と表示する。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 set_defaultIp set_defaultGw set_defaultIp関数とset_defaultGw関数を実行する。 # wait linkup delay sleep 4 リンクが始動するのを4秒間待つ。 fi dhcpcdコマンドがエラーを返すかどうかの条件分岐を終了する。 else my_ipaddress変数が「dhcp」でなければ以下を実行。 echo "DHCPCSTATE=fixip" /var/tmp/dhcpcstate /var/tmp/dhcpcstateに「DHCPCSTATE=fixip」と書き込む。 echo "/sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask" /sbin/ifconfig $ENETNAME $my_ipaddress netmask $my_subnetmask /sbin/ifconfig eth0 $my_ipaddress netmask $my_subnetmask を実行。 if [ $? -ne 0 ]; then エラーが返れば以下。 set_defaultIp set_defaultIp関数を実行。 fi エラーかどうかの判別終了。 set_defaultGw set_dns set_defaultGw関数、set_dns関数の実行。 fi my_ipaddress変数が「dhcp」かどうかの条件分岐を終了する。 ## set_defaultIf set_defaultIf関数を実行する。 ## set ipaddress in /etc/hosts /etc/init.d/sethostname.sh /etc/hostsにIPアドレスを設定する、というコメント。 /etc/init.d/sethostname.shの実行。 #/usr/local/bin/change_notify.sh network /usr/local/bin/change_notify.sh networkの実行はコメントアウトだ。 } start関数はここまで。 stop関数 stop() { stop関数はここから。 echo "Deconfiguration network interface lo $ENETNAME" 画面上に「Deconfiguration network interface lo eth0」と表示する。 killall $BASE killallコマンド?で「basename /sbin/dhcpcd」を停止する、という内容だが、basenameコマンド?で/sbin/dhcpcdを「dhcpcd」と削ってkillallコマンド?に渡している。 結果的には「killall dhcpcd」となる。 /sbin/ifconfig $ENETNAME down ifconfigコマンド?でeth0を停止している。 /sbin/ifconfig lo down ifconfigコマンド?でlo(ループバック)デバイスを停止している。 } stop関数はここまで。 スクリプト本体 # for NFS NFS用の分岐。NFSとは「Network File System」の略。 ネットワーク上のデバイスを自分のファイルのように扱えるファイルシステムだ。 TMP=`grep /dev/root /proc/mounts|grep nfs` TMPという変数を用意し、そこに「grep /dev/root /proc/mounts|grep nfs」を代入している。 1つめのgrep /proc/mountsから/dev/rootという文字列を検索している。その結果を次に渡す。 2つめのgrep 渡された結果からnfsという文字列を検索している。 これらはつまり「/dev/rootがnfs形式でマウントされているかどうか」を調査しているということだ。 この結果は「(空)」か「nfs」というどちらか2つしかない。 if [ "$TMP" != "" ]; then TMP変数が空でなければ以下を実行。 つまり/dev/rootがnfs形式でマウントされていれば、という条件だ。 echo "nfs root mode. skip $ENETNAME network configuration." 画面上に「nfs root mode. skip eth0 network configuration.」と表示。 exit 0 終了ステータスに正常を示す「0」を設定しスクリプトを終了する。 fi TMP変数が空かどうかの条件分岐を終了。 lock_file check /usr/local/bin/kuro_libのlock_file関数にcheckという引数を付けて実行。 lock_file関数を見てみる。 lock_file関数 lock_file(){ lock_file関数はここから。 case $1 in 第1引数の内容で処理内容を分岐する。 checkの場合 check) [ -f "${LOCK}" ] echo "${THIS_SCRIPT} already runnign" /var/lock/networkingが存在すれば、画面上に「${THIS_SCRIPT} already runnign」と表示する。 ちなみに行末の「runnign」は「running」のスペルミスだろう。 return 1 ;; 戻り値に「1」を設定しlock_file関数を終了する。 createの場合 create) echo "${THIS_SCRIPT}" $2 ${LOCK} ;; 「${THIS_SCRIPT} 第2引数」と/var/lock/networkingに書き込む。 deleteの場合 delete) rm -f ${LOCK} ;; /var/lock/networkingを消去する。 delete_logの場合 delete_log) rm -f ${LOCK}.log ;; /var/lock/networking.logを消去する。 それ以外の場合 *) ;; 何もしない。 esac 第1引数の内容による処理振り分けを終了する。 } lock_file関数はここまで。 lock_file create case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage $0 {start|stop|restart}" ;; esac lock_file delete exit 0
https://w.atwiki.jp/wiki1_itunes/pages/20.html
iTunesの使い方 使い方はAppleのサイトを読めば誰にでも使いこなせるようになる。 iTunes サービス&サポート ※トラブル解決方法も↑のAppleのサイトを見ればOK
https://w.atwiki.jp/aerocats/pages/33.html
標準Linuxの/usr/local/bin/内にある。 HDDの初期化の役割を担う。 ユーザーの意思次第で、開発用LinuxをHDDに設置したりHDDブートするように設定する。 動作内容 スクリプト スクリプト詳細ExitWithError関数 スクリプト本文 デバイスの初期化 動作内容 HDDがマウントされていないことを確認。されていればエラー終了。 HDDがxfs形式でフォーマットされていないことを確認。されていればエラー終了。 /mnt/mtdにChangeMeDevHDDがあるかどうかを確認して以下を実行。 ある場合 HDDを/dev/sda1、/dev/sda2、/dev/sda3、/dev/sda4の4つのパーティションに切り、それぞれをフォーマットする(マウントはしない)。 デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs SetupDevEnv.shの実行 /mnt/mtdにhddrootfs.tar.gz、uImage.buffaloがあるかどうかを確認して以下を実行。 ある場合 /mnt/bootディレクトリを作成し、/dev/sda1をext3形式でマウントして、そこにuImage.buffaloをコピーする。 /mnt/rootfsディレクトリを作成し、/dev/sda2をxfs形式でマウントして、そこにhddrootfs.tar.gzを展開する。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/boot ext3 /dev/sda2 /mnt/rootfs xfs /usr/local/bin/kuro_libを/mnt/rootfs/usr/local/binにコピーする。 ChangeMyUbootEnvがあればU-Boot環境変数を書き換える。なければそのまま終了する。 ない場合 エラー終了させる。 ない場合 HDDを/dev/sda1と1つだけのパーティション?に切りxfs形式でフォーマットする。 デバイス フォーマット形式 /dev/sda1 xfs /dev/sda1を/mnt/disk1にxfs形式でマウントする。 デバイス マウントポイント マウントタイプ /dev/sda1 /mnt/disk1 xfs /mnt/disk1のパーミッションを777にする。 スクリプト #!/bin/sh . /usr/local/bin/kuro_lib # $1 Error type {mounted | formatted} ExitWithError(){ miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 case $1 in mounted) echo "disk is already mounted!" /dev/console ;; formatted) echo "disk is already formatted!" /dev/console ;; esac sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off exit 1 } # Check point 1. disk is already mounted or not. IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted # Check point 2. disk is already formatted or not. XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted # OK! Disk is not mounted and not formatted. miconapl -a led_set_code_information 28 miconapl -a bz_on button if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 /usr/local/sbin/SetupDevEnv.sh else fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 Format_XFS ${DISK1_DEV}1 MountShare ${DISK1_DEV} ${DISK1_MPT} fi miconapl -a led_set_code_information clear ~ # スクリプト詳細 ブロックごとに見てみる。 #!/bin/sh シェルの指定。shを指定している。 . /usr/local/bin/kuro_lib /usr/local/bin/kuro_libをサブシェルで実行している。 このkuro_lib内の InMounted関数 Format_EXT3関数 Format_XFS関数 MountShare関数 IsHavePartition関数 DISK1_DEV変数(=/dev/sda) DISK1_MPT変数(=/mnt/disk1) CHANGE_TO_DEVHDD_FILE変数(=/mnt/mtd/ChangeMeDevHDD) HEXDUMP変数(=/usr/bin/hexdump) を使用するためだ。 ExitWithError関数 関数の定義が始まる。なお、この項目は関数が以後の命令で呼び出された時に機能する内容であり、スクリプト実行と同時に実行されるわけではない。 # $1 Error type {mounted | formatted} ExitWithError(){ 第1引数はmountedかformattedというエラータイプだ、と解説されている。 miconapl -a led_set_cpu_mcon diag miconapl -a led_set_on_off diag miconapl -a led_set_brink diag miconapl -a bz_on on3off3 まずはどのタイプのエラーであれ(この関数が呼び出されている時点で何らかのエラーには間違いないため)、miconaplコマンドでLEDとブザーが共通の操作をされている。 詳しくはmiconaplコマンドで記すが、この4行で エラーLEDが点滅 ブザーがピッピッピと鳴る という動作になる。 case $1 in 先ほどの第1引数の内容によって以後の処理動作を分けている。 第1引数がmountedの場合 mounted) echo "disk is already mounted!" /dev/console ;; echoコマンド?で「disk is already mounted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 第1引数がformattedの場合 formatted) echo "disk is already formatted!" /dev/console ;; echoコマンド?で「disk is already formatted!」という一文がコンソールデバイスに出力されている。 これだけでこのcase文を抜ける。 esac 以上の処理でmountedかformattedか、というcase文は終了する。 sleep 5 miconapl -a bz_on miconapl -a led_set_brink off miconapl -a led_set_on_off off miconapl -a led_set_cpu_mcon off 5秒間一時停止した後に、LEDとブザーの動作を止めている。 exit 1 終了ステータスに異常を表す「1」を指定。 } ExitWithError関数はここまで。 スクリプト本文 ここからがいわゆるInitDisk1.shのスクリプト本体だ。 # Check point 1. disk is already mounted or not. まずはチェックポイント1としてHDDがすでにマウントされているかいないかを以下で調査している。 サブシェルで走らせている/usr/local/bin/kuro_lib内の関数「IsMounted」を使うことになる。 ここで述べておく方が理解が容易なので、InitDisk1.shスクリプトの内容ではないが/usr/local/bin/kuro_lib内のIsMounted関数に触れておく。 IsMounted関数 /usr/local/bin/kuro_lib内の関数であり、引数を1つ付けさせて内容により戻り値として「0」か「1」を返す仕組みのようだ。 # $1 device of check target # retval # 1 device $1 is mounted. # 0 device $1 is not mounted. 第1引数はチェック対象のデバイスであり、このIsMounted関数が戻り値1を返せばそのデバイスはマウントされている、0を返せばされていないとする旨の解説だ。 IsMounted(){ MOUNTED=`grep $1 /proc/mounts` MOUNTEDという変数を用意しそこにgrep $1 /proc/mountsの結果を代入している。 $1とはIsMounted関数に付けられた第1引数であり、${DISK1_DEV}すなわち/dev/sdaを指す。 つまり、procコマンド?でマウント状態を調べたとき、/dev/sdaという文字が含まれるものを抽出していることになる。 その結果がMOUNTEDという変数に代入される。 if [ "${MOUNTED}" != "" ] ; then return 1 else return 0 fi このMOUNTED変数がカラでなければ戻り値1を返しIsMounted関数を終了、そうでなければ(カラであれば)0を返しIsMounted関数を終了する、という内容。 この作業で、/dev/sdaがマウントされているかどうかが判別できる。 return 0 上のいずれにもあてはまらなければ(実際にはあり得ないが)0を返す。 } IsMounted関数はここまで。 ここからまたスクリプト本文の解説に戻る。 IsMounted ${DISK1_DEV} ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}1 ; [ $? = 1 ] ExitWithError mounted IsMounted ${DISK1_DEV}4 ; [ $? = 1 ] EixtWithError mounted IsMounted関数に${DISK1_DEV}(=/dev/sda)、${DISK1_DEV}1(=/dev/sda1)、${DISK1_DEV}4(=/dev/sda4)という引数をそれぞれ付け、戻り値は0か1が返ってくるのを待ち、返って来た結果(戻り値「$?」)が1ならばExitWithError関数をmountedという引数を付けて実行している。 /dev/sdaもしくは/dev/sda1、/dev/sda4のいずれか一つでもマウントされていればInitDisk1.shはエラー終了してしまう、ということだ。 誤動作防止のためだと思われる。 これでチェックポイント1であるマウントされているかどうかの調査は終了する。 # Check point 2. disk is already formatted or not. 次にチェックポイント2としてHDDがすでにフォーマットされているかいないかを以下で調査している。 XFS_FORMATTED=`dd if=${DISK1_DEV} bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}1 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted XFS_FORMATTED=`dd if=${DISK1_DEV}4 bs=1 count=3` ; [ "${XFS_FORMATTED}" = XFS ] ExitWithError formatted 流れとしては XFS_FORMATTEDという変数を用意 そこに対象となるデバイスのフォーマット形式を代入 それがxfs形式かどうかを判別 xfs形式ならばExitWithError関数にformatted引数を付けてエラー処理 となる。 デバイスのフォーマットの調べ方だが、ここではddコマンドで行っている。 ddコマンドのofパラメータは出力先を指すが、今回これは指定しないのですなわち標準出力を指す。 xfs形式でフォーマットされたデバイス(パーティション?)は、 dd if=デバイス bs=1 count=3 とすると XFS3+0 records in 3+0 records out とコンソールには表示されるが、内部的にはXFSの3文字だけが出力されている(of=/mnt/disk1/dd.txtなどで確認してみるとはっきりする)。 ext3ではXFSは表示されないが、XFS形式のものをmkfs.ext3で上書きした場合はXFSと表示されてしまう。 パーティション?の先頭を0で埋めた後、領域を破壊した上でmkfs.ext3を実行しないと機械的にはXFSとみなされるので注意が必要だ。 上の命令は/dev/sda、/dev/sda1、/dev/sda4のいずれかがxfs形式ならばformattedという引数を付けてExitWithError関数を実行(すなわちエラー処理)する、という意味だ。 # OK! Disk is not mounted and not formatted. 以上、2つのチェックポイントを無事通過できると次の処理が待っている。 デバイスの初期化 miconapl -a led_set_code_information 28 miconapl -a bz_on button オレンジのLEDを点滅させ、ブザーをピっと鳴らす。 /mnt/mtdにChangeMeDevHDDがある場合 if [ -e ${CHANGE_TO_DEVHDD_FILE} ] ; then この「-e」という評価式は「存在すれば真」なので、CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在すれば以下を実行、という意味になる。 なお、このChangeMeDevHDDとは、附属CD-ROM内にあるもので「HDDパーティション?を開発用に設定するための意思表示ファイル」となっている。中身は何もない。 この条件分岐のためだけにあり、あるかないかが問題なだけだ。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition /usr/local/bin/PartitionDefinitionに記載されている内容に従って/dev/sdaにパーティション?をきっていく。 記載された内容とは パーティション? サイズ パーティションタイプ /dev/sda1 50MB Linux /dev/sda2 3GB Linux /dev/sda3 128MB swap /dev/sda4 残り Linux となっている。 次に、きられたパーティション?に今度はファイルシステムを導入する。 まずは/usr/local/bin/kuro_lib内の関数「Format_EXT3」を説明する。 Format_EXT3関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをext3形式にフォーマットする関数のようだ。 # $1 target device to format Format_EXT3(){ 第1引数のデバイスをフォーマット対象とする。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示する。 mkfs.ext3 $1 mkfs.ext3コマンド?で第1引数のデバイスをext3形式でフォーマットする。 if [ $? -eq 0 ] ; then $?とは上のmkfs.ext3コマンド?の実行結果の終了ステータスを指しているのだが、これが「0」すなわち成功ならば次を実行、となっている。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示する。つまり「フォーマットはエラーもなく成功した。」と表示している。 else $?が「0」でなければ、つまりフォーマットに失敗しているのならば次を実行。 return 1 exit 1 fi return 1とは、関数の戻り値を1に明示的に指定してFormat_EXT3関数を終了しているわけだが、このスクリプト内で戻り値を具体的に利用する様子は見受けられないので意味はないだろう。 /usr/local/bin/kuro_libは様々なスクリプトで利用されているライブラリ的なスクリプトなので、どこかで利用するものかもしれない。 exit 1も同じような意味合いだが、終了ステータスを「1」(異常)に設定してスクリプト(/usr/local/bin/kuro_lib)を終了するようにしている。 return 0 戻り値「0」をセットしFormat_EXT3関数を抜ける。 } Format_EXT3関数はここまで。 次に/usr/local/bin/kuro_lib内の関数「Format_XFS」を説明する。 Format_XFS関数 /usr/local/bin/kuro_lib内の関数であり、引数一つを受け取りそのデバイスをxfs形式にフォーマットする関数のようだ。 # $1 target device to format. Format_XFS(){ 第1引数のデバイスをフォーマット対象とする。 KEY=`dd if=$1 bs=1 count=3` KEYという変数を用意し、そこにdd if=$1 bs=1 count=3の結果を代入する。 先ほど検証したようにxfs形式のデバイスに対してこのコマンドを使うと「XFS」と出力される。 if [ "${KEY}" = "XFS" ] ; then KEYの値がXFSならば次を実行、という意味だ。つまりここは対象デバイスのフォーマット形式がxfs形式かどうかを条件分岐にしている。 . /etc/melco/info /etc/melco/infoをサブシェルで走らせているが、標準Linuxにはこのファイルは存在しない。 製品仕様書にも初期化SWの項目に 内蔵HDD(/dev/sda)が既にxfs形式でフォーマットされている場合、フォーマットは行われない。但し、/etc/melco/info内、force_format=yesとすることで、xfsでフォーマットされている/いないにかかわらず、フォーマットを行うようにすることができる。 と記載されている。強制フォーマットの機能を使うのであれば自分で/etc/melco/infoを用意するしかない。 if [ "${force_format}" = "yes" ] ; then /etc/melco/info内の「force_format」項目が「yes」となっていれば以下を実行。 echo "Disk (or partition) is looks like already formatted." echo "If you stop format, Press Ctrl+C in 10 seconds!!!" 画面に「Disk (or partition) is looks like already formatted.If you stop format, Press Ctrl+C in 10 seconds!!!」と表示。 「ディスク(あるいはパーティション?)は既にフォーマットされているようです。フォーマットを中止する場合は10秒以内にCtrl+Cを押してください」という意味。 COUNTER=10 COUNTERという変数を用意し、そこに10を代入。 echo -n "waiting " 画面に「waiting」と表示。-nオプションは「テキストの行末で改行しない」という意味。 while [ ${COUNTER} -gt 0 ] COUNTER変数が0より大きければdo~doneの内容を繰り返す。 do echo -n "." sleep 1 COUNTER=$((${COUNTER} - 1)) done 「waiting」の行末に「.」を表示し、1秒待った後COUNTER変数から1を引く、という内容。 先のwhile条件から、1を引いた結果が0よりも大きければ同じことを繰り返す、ということなので、これで結果的に10秒間待機することになる。 「.」を1秒ごとに表示させるためにwhile文を使ったのだろう。 echo "" echo "OK, go on formatting." echoで空白を表示、これは改行させる目的で、次に「OK, go on formatting.」を表示させている。 else /etc/melco/info内の「force_format」項目が「yes」となっていなければ以下を実行。 return 0 戻り値を「0」に設定しFormat_XFS関数を抜ける。つまりこの関数内の以後の命令は実行しない。 fi fi if [ "${force_format}" = "yes" ]を抜け、すぐ次にif [ "${KEY}" = "XFS" ]も抜けている。 echo "***** Cleaning Disk partition information *****" 画面に「***** Cleaning Disk partition information *****」と表示。 dd if=/dev/zero of=$1 bs=512 count=1 ddコマンドを使ってデバイスの先頭から512バイトに「0」を書き込んでいる。 要するにそのデバイス(パーティション?)を先頭から512バイト分データを消去している。 echo "***** Starting to format $1 *****" 画面に「***** Starting to format 対象デバイス *****」と表示。 mkfs.xfs $1 -f デバイスをmkfs.xfsコマンド?でxfs形式にフォーマットしている。-fは上書きオプション。 if [ $? -eq 0 ] ; then 終了ステータスが0であれば、つまり上のmkfs.xfsコマンド?がエラーでなければ以下を実行。 echo "Format is succeeded without error." 画面に「Format is succeeded without error.」と表示。 else mkfs.xfsでエラーが発生すれば return 1 exit 1 fi 戻り値を1、終了ステータスを1に設定して終了。 return 0 戻り値を0に設定しFormat_XFS関数を抜ける。 } Format_XFS関数はここまで。 これら関数を使ってファイルシステムを導入する命令が以下。 Format_EXT3 ${DISK1_DEV}1 Format_XFS ${DISK1_DEV}2 Format_XFS ${DISK1_DEV}4 mkswap ${DISK_DEV}3 わかりやすく表にすれば デバイス フォーマット形式 /dev/sda1 ext3 /dev/sda2 xfs /dev/sda3 swap /dev/sda4 xfs という意味だが、 mkswap ${DISK_DEV}3 は上のパーティション?の様子からすると mkswap ${DISK1_DEV}3 でなければならないはずだ。開発用Linuxのfstabで/dev/sda3をswapでマウントしようとしても、フォーマットが完了していないため失敗するだろう。 /usr/local/sbin/SetupDevEnv.sh そして、/usr/local/sbin/SetupDevEnv.shを実行する。詳細はSetupDevEnv.shの項目で説明する。 その後、miconapl -a led_set_code_information clearを実行してInitDisk1.shを終了する。 /mnt/mtdにChangeMeDevHDDがない場合 else CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)が存在しなければ以下を実行。 fdisk ${DISK1_DEV} /usr/local/bin/PartitionDefinition1 /dev/sdaを/usr/local/bin/PartitionDefinition1に従ってパーティション?分割作業する。 パーティション? サイズ パーティションタイプ /dev/sda1 すべて Linux という内容だ。 Format_XFS ${DISK1_DEV}1 Format_XFS関数で/dev/sda1をxfs形式にフォーマット。 MountShare ${DISK1_DEV} ${DISK1_MPT} MountShare関数に 第1引数 /dev/sda 第2引数 /mnt/disk1 という引数を付けて実行させている。 ここで/usr/local/bin/kuro_lib内のMountShare関数を説明する。 MountShare関数 /usr/local/bin/kuro_lib内の関数。4つまでの引数に対応し、3つの戻り値を設定できる。 # $1 target device to mount. # $2 target mountpoint of $1. # $3 File system of target device(default is xfs). # $4 Mounted device permission(default is 777). MountShare(){ 第1引数にマウントする対象デバイス、第2引数に対象デバイスのマウント先、第3引数に対象デバイスのファイルシステム(初期値はxfs形式)、第4引数にマウントしたデバイスのパーミッション(初期値は777)、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) MountShare関数の戻り値ではない。IsHavePartition関数からの戻り値を説明している。 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 if [ "$1" = "/dev/sda" -o "$1" = "/dev/sdb" ] ; then 第1引数が/dev/sdaあるいは/dev/sdbであれば以下を実行。 IsHavePartition $1 /usr/local/bin/kuro_lib内のIsHavePartition関数に第1引数を付けて実行している。 ここでIsHavePartition関数を説明する。 IsHavePartition関数 # $1 target device to check partition 第1引数にパーティション状態をチェックする対象デバイス、という解説。 # ret 0 this is no partition disk. # ret 1 this is nand share type partition # ret 2 this is developkit type partition (maybe) 戻り値「0」で「パーティション?が存在しないディスクです」、「1」で「NANDフラッシュ共有時(つまり標準Linux時)のパーティション?です」、「2」で「(おそらく)開発用Linux時のパーティション?です」と、それぞれ意味する。 IsHavePartition(){ if [ -x ${HEXDUMP} ] ; then HEXDUMP変数(=/usr/bin/hexdump)に-xオプションを付けて条件としている。-xオプションは「存在し、かつ実行可能なら真」という意味なので、ここでは「/usr/bin/hexdumpが存在し、かつ実行可能なら次を実行」という意味になる。 DISK_1_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "1p"|awk {print $10} ` DISK_1_PART_TAILという変数を用意し、そこにhexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "1p"|awk {print $10} という内容を代入している。 パイプで3つの命令がつながっているが、それぞれに分けて考えてみる。 hexdump hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 hexdumpコマンドを使っている。先頭から446バイト読み飛ばした所から64バイト分だけを読み込み、それを「8/1 "%02x " 2/4 "%10d " "\n"」というフォーマットで第1引数のデバイスを表示する、という意味になる。 HDDの先頭512バイトはMBR領域となっており、その中の先頭446バイトから64バイトはパーティションテーブルが4エントリ分(1エントリ16バイト)ある。 つまりここでは4つのパーティションテーブルを読み込んだことになる。 次に、詳細はhexdumpコマンドで説明するが、「繰り返し回数/バイト数 "フォーマット"」の羅列がhexdumpコマンドのフォーマット形式なので、この場合は 8回繰り返し/1バイト "フィールド幅2(2桁表示で満たない桁は0で表示)で16進数変換" 2回繰り返し/4バイト "フィールド幅10(10桁表示で満たない桁は空白で表示)で10進数変換" 改行 という内容になる。 つまり、「1バイトづつ8回、4バイトづつ2回、計16バイトを10回にわけて読み込み、それを4行に出力」という内容だ。 パーティションテーブルを1つ読み込んでは改行し、64バイト分すべてを16バイトづつ4行10フィールドで表現している。 4つのパーティション?を切ったHDDで試してみると以下の結果を得た。 00 01 01 00 83 fe 3f 06 63 112392 00 00 01 07 83 fe 7f 74 112455 5879790 00 00 41 75 82 fe 7f 85 5992245 273105 00 00 41 86 83 fe ff ff 6265350 150031035 sed sed -n "1p" 「-n」オプションでhexdumpコマンドから受け取った結果の1行目(pが行を表す)だけを抽出している。 ここの「1p」が「2p」「3p」「4p」と変化していくのは、それぞれパーティションテーブルを1から4まで読み、該当パーティションテーブル以外を破棄している。 先ほどの例で試すと 00 01 01 00 83 fe 3f 06 63 112392 という結果を得る。 awk awk {print $10} sedコマンド?から受け取った行の第10フィールドの値を出力している。 第10フィールドはLBAのパーティション?総セクター数(4バイト)を意味する。 つまり、最終的にDISK_1_PART_TAIL変数に代入したい値とは、各パーティション?の総セクター数であることがわかる。これはhexdumpコマンドで10進数にされている。 DISK_2_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "2p"|awk {print $10} ` DISK_3_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "3p"|awk {print $10} ` DISK_4_PART_TAIL=`hexdump -s 446 -n 64 -e 8/1 "%02x " 2/4 "%10d " "\n" $1 | sed -n "4p"|awk {print $10} ` 先ほどと同様な処理を各パーティション?ごとにDISK_パーティション番号_PART_TAILという変数に代入している。 例で試すと 112392 という結果。 総セクター数が0であればそのパーティション?は存在しない、という意味になる。 if [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -eq 0 -a "${DISK_3_PART_TAIL}" -eq 0 -a "${DISK_4_PART_TAIL}" -eq 0 ] ; then 第1パーティションの総セクター数が0ではない かつ第2~4パーティションの総セクター数が0 の場合に以下を実行する。 return 1 戻り値「1」を設定し関数を抜ける。 つまり「this is nand share type partition」ということになる。 elif [ "${DISK_1_PART_TAIL}" -ne 0 -a "${DISK_2_PART_TAIL}" -ne 0 -a "${DISK_3_PART_TAIL}" -ne 0 -a "${DISK_4_PART_TAIL}" -ne 0 ] ; then 第1~4パーティションの総セクター数が0ではない の場合に以下を実行。 return 2 戻り値「2」を設定し関数を抜ける。 つまり「this is developkit type partition (maybe)」ということだ。 else それ以外の場合、つまり 第1パーティションの総セクター数が0 の場合に以下を実行。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi パーティション?総セクター数の条件分岐を終了する。 else 「/usr/bin/hexdumpが存在し、かつ実行可能」ではない場合は以下を実行、という意味。 return 0 戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 fi 「/usr/bin/hexdumpが存在し、かつ実行可能」という条件分岐を終了する。 return 0 いずれにもあてはまらなかった場合、戻り値に「0」を設定し関数を抜ける。 つまり「this is no partition disk.」ということになる。 } IsHavePartition関数はここまで。 ここからまたMountShare関数に戻る。 RET=$? RETという変数を用意し、そこにIsHavePartition関数の戻り値を代入。 [ "${RET}" -eq 1 ] TARGET_DEV=${1}1 [ "${RET}" -eq 2 ] TARGET_DEV=${1}4 [ "${RET}" -eq 0 ] TARGET_DEV=${1} 戻り値が1ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第1パーティション?を代入する。 戻り値が2ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)の第4パーティション?を代入する。 戻り値が0ならば、TARGET_DEV変数にMountShare関数に付けた第1引数(if文の関係上、/dev/sdaか/dev/sdb)を代入する。 というように処理している。 else MountShare関数に付けた第1引数が/dev/sdaでも/dev/sdbでもなければ以下を実行。 TARGET_DEV=$1 TARGET_DEV変数にMountShare関数に付けた第1引数を代入。 fi MountShare関数に付けた第1引数が/dev/sdaか/dev/sdbか、という条件分岐を抜ける。 IsMounted ${TARGET_DEV} IsMounted関数に第1引数としてTARGET_DEV変数を渡す。先ほど説明したとおり、戻り値「1」で「device is mounted.」、戻り値「0」で「device $1 is not mounted.」という意味になる。 if [ $? = 1 ] ; then 戻り値が「1」ならば、つまり「device is mounted.」という意味ならば次を実行。 echo "${TARGET_DEV} is already mounted." 画面上に「対象デバイス is already mounted.」と表示。 return 1 戻り値「1」を設定しMountShare関数を抜ける。 fi IsMounted関数の戻り値による条件分岐を抜ける。 if [ "$3" = "" ] ; then MountShare関数の第3引数が何もなければ以下を実行する。 FS=xfs FSという変数を用意し、そこにxfsを代入する。 else MountShare関数の第3引数に何かあれば以下を実行する。 FS=$3 FSという変数を用意し、そこにその第3引数を代入する。 fi MountShare関数の第3引数の有無の条件分岐を抜ける。 if [ "$4" = "" ] ; then MountShare関数の第4引数が何もなければ以下を実行する。 PERMISSION=777 PERMISSIONという変数を用意し、そこに777を代入する。 else MountShare関数の第4引数に何かあれば以下を実行する。 PERMISSION=$4 PERMISSIONという変数を用意し、そこにその第4引数を代入する。 fi MountShare関数の第4引数の有無の条件分岐を抜ける。 echo "Mounting ${TARGET_DEV} on $2 as a ${FS} file system." 画面上に「Mounting 対象デバイス(MountShare関数の第1引数) on マウントポイント( MountShare関数の第2引数) as a ファイルシステムタイプ(MountShare関数の第3引数) file system.」と表示する。 mount -t ${FS} ${TARGET_DEV} $2 実際に設定した変数の値をもとにmountコマンドでマウントする。 case $? in mountコマンドの終了ステータスをもとに実行内容を変える。 0) 終了ステータス「0」(正常)の場合 chmod ${PERMISSION} $2 echo "Success." ;; chmodコマンド?で設定したパーミッションでマウントポイントのデバイスを指定し、画面上に「Success.」と表示してcase文を抜ける。 *) 終了ステータス「1」(異常)の場合 echo "Failed." return 1 ;; 画面上に「Failed.」と表示して、戻り値「1」を設定しMountShare関数を抜ける。 esac case文はここまで。 echo "" return 0 画面上を改行して戻り値「0」を設定しMountShare関数を抜ける。 } MountShare関数はここまで。 fi CHANGE_TO_DEVHDD_FILE(/mnt/mtd/にChangeMeDevHDD)の有無の条件分岐を抜ける。 miconapl -a led_set_code_information clear LEDの点滅を止める。
https://w.atwiki.jp/aerocats/pages/62.html
/sbinとは /sbinの構成 実際に標準Linuxの/sbinがどのようになっているのかを見てみる。 コマンド 備考 説明 adjtimex BusyBoxのシンボリックリンク depmod dhcpcd e2fsck fsck.ext2のシンボリックリンク fdisk BusyBoxのシンボリックリンク freeramdisk BusyBoxのシンボリックリンク fsck BusyBoxのシンボリックリンク fsck.ext2 fsck.ext3 fsck.ext2のシンボリックリンク fsck.minix BusyBoxのシンボリックリンク getty BusyBoxのシンボリックリンク halt BusyBoxのシンボリックリンク hdparm BusyBoxのシンボリックリンク hwclock BusyBoxのシンボリックリンク ifconfig BusyBoxのシンボリックリンク ifdown BusyBoxのシンボリックリンク ifup BusyBoxのシンボリックリンク init BusyBoxのシンボリックリンク insmod BusyBoxのシンボリックリンク klogd BusyBoxのシンボリックリンク ldconfig loadkmap BusyBoxのシンボリックリンク logread BusyBoxのシンボリックリンク losetup BusyBoxのシンボリックリンク lsmod BusyBoxのシンボリックリンク makedevs BusyBoxのシンボリックリンク mdev BusyBoxのシンボリックリンク mke2fs mkfs.ext2のシンボリックリンク mkfs.ext2 mkfs.ext3 mkfs.ext2のシンボリックリンク mkfs.minix BusyBoxのシンボリックリンク mkswap BusyBoxのシンボリックリンク modinfo modprobe BusyBoxのシンボリックリンク nameif BusyBoxのシンボリックリンク pivot_root BusyBoxのシンボリックリンク poweroff BusyBoxのシンボリックリンク reboot BusyBoxのシンボリックリンク rmmod BusyBoxのシンボリックリンク route BusyBoxのシンボリックリンク runlevel BusyBoxのシンボリックリンク setconsole BusyBoxのシンボリックリンク shutdown start-stop-daemon BusyBoxのシンボリックリンク sulogin BusyBoxのシンボリックリンク swapoff BusyBoxのシンボリックリンク swapon BusyBoxのシンボリックリンク switch_root BusyBoxのシンボリックリンク sysctl BusyBoxのシンボリックリンク syslogd BusyBoxのシンボリックリンク tune2fs vconfig BusyBoxのシンボリックリンク watchdog BusyBoxのシンボリックリンク zcip BusyBoxのシンボリックリンク
https://w.atwiki.jp/aerocats/pages/57.html
起動メッセージ シリアルコンソール使用 LAN接続済み HDD装着 Orion1 CPU = Low === KURO U-Boot. === ** LOADER ** ** KUROBOX BOARD KURO_BOX LE (CFG_ENV_ADDR=fffff000) U-Boot 1.1.1 (Apr 10 2007 - 18 10 08) Marvell version 1.12.1 - TINY DRAM CS[0] base 0x00000000 size 128MB DRAM Total size 128MB [256kB@fffc0000] Flash 256 kB Addresses 20M - 0M are saved for the U-Boot usage. Mem malloc Initialization (20M - 16M) Done NAND 256 MB Soc 88F5182 A2 CPU ARM926 (Rev 0) running @ 500Mhz Orion 1 streaming disabled SysClock = 250Mhz , TClock = 166Mhz USB 0 host mode USB 1 host mode PCI 0 PCI Express Root Complex Interface PCI 1 Conventional PCI, speed = 33000000 Net egiga0 [PRIME] Using 88E1118 phy hit any key to switch tftp boot. Hit any key to stop autoboot 2 1 0 system_bootend Hit any key to stop autoboot 3 2 1 0 Reset IDE Marvell Serial ATA Adapter Integrated Sata device found Device 0 OK Model ST380815AS Firm 3.AAC Ser# 9QZ15T5J Type Hard Disk Supports 48-bit addressing Capacity 76319.0 MB = 74.5 GB (156301488 x 512) Using device ide0, partition 1 Loading from block device ide device 0, partition 1 Name hda1 Type U-Boot File /uImage.buffalo 1736436 bytes read stop_sound ## Booting image at 00100000 ... Image Name Linux-2.6.12.6-arm1 Created 2007-02-08 6 00 09 UTC Image Type ARM Linux Kernel Image (uncompressed) Data Size 1736372 Bytes = 1.7 MB Load Address 00008000 Entry Point 00008000 Verifying Checksum ... OK OK Starting kernel ... arg console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09 CONFIG_BUFFALO_PLATFORM CONFIG_BUFFALO_KUROBOX --- Uncompressing Linux................................................................................................................. done, booting the kernel. Linux version 2.6.12.6-arm1 (root@dev-hara) (gcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2)) #2 Thu Feb 8 15 00 20 JST 2007 CPU ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ) CPU0 D VIVT write-back cache CPU0 I cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets CPU0 D cache 32768 bytes, associativity 1, 32 byte lines, 1024 sets Machine MV-88fxx81 Using UBoot passing parameters structure Sys Clk = 250000000, Tclk = 166664740 Memory policy ECC disabled, Data cache writeback Built 1 zonelists Kernel command line console=ttyS0,115200 root=/dev/sda2 rw panic=5 BOOTVER=1.09 PID hash table entries 1024 (order 10, 16384 bytes) Console colour dummy device 80x30 Dentry cache hash table entries 32768 (order 5, 131072 bytes) Inode-cache hash table entries 16384 (order 4, 65536 bytes) Memory 128MB 0MB 0MB 0MB = 128MB total Memory 126208KB available (3037K code, 425K data, 112K init) Mount-cache hash table entries 512 CPU Testing write buffer coherency ok NET Registered protocol family 16 serial_initialize_ttyS1 (Debug) ttyS1 is initialized. config_device_cs Error Unknown board CPU Interface ------------- SDRAM_CS0 ....base 00000000, size 128MB SDRAM_CS1 ....disable SDRAM_CS2 ....disable SDRAM_CS3 ....disable PEX0_MEM ....base e0000000, size 128MB PEX0_IO ....base f2000000, size 1MB PCI0_MEM ....base e8000000, size 128MB PCI0_IO ....base f2100000, size 1MB INTER_REGS ....base f1000000, size 1MB DEVICE_CS0 ....base fa000000, size 2MB DEVICE_CS1 ....base f4000000, size 32MB DEVICE_CS2 ....base fa800000, size 1MB DEV_BOOCS ....base ff800000, size 8MB CRYPTO ENG ....no such Flash bankwidth 1, base ff800000, size 400000 BUFFALO KUROBOX FLASH size 4096[KB] Marvell Development Board (LSP Version 1.10.3.patch5_DB_NAS)-- BUFFALO_BOARD_KUROBOX Soc 88F5182 A2 Detected Tclk 166664740 and SysClk 250000000 Marvell USB EHCI Host controller #0 c04e4b00 Marvell USB EHCI Host controller #1 c04e4a40 pexBarOverlapDetect winNum 2 overlap current 0 mvPexInit Warning Bar 2 size is illigal it will be disabled please check Pex and CPU windows configuration PCI bus0 Fast back to back transfers enabled PCI bus1 Fast back to back transfers enabled SCSI subsystem initialized usbcore registered new driver usbfs usbcore registered new driver hub Use the XOR engines (offloading) for enhancing the following functions o RAID 5 Xor calculation o kernel memcpy o kenrel memzero o copy user to/from kernel buffers Number of XOR engines to use 2 cesadev_init(c00122e0) Fast Floating Point Emulator V0.9 (c) Peter Teichmann. inotify device minor=63 JFFS2 version 2.2. (NAND) (C) 2001-2003 Red Hat, Inc. SGI XFS with no debug enabled Serial 8250/16550 driver $Revision 1.90 $ 4 ports, IRQ sharing disabled ttyS0 at MMIO 0x0 (irq = 3) is a 16550A ttyS1 at MMIO 0x0 (irq = 4) is a 16550A io scheduler noop registered io scheduler anticipatory registered io scheduler deadline registered io scheduler cfq registered RAMDISK driver initialized 3 RAM disks of 32768K size 1024 blocksize loop loaded (max 8 devices) Marvell Gigabit Ethernet Driver egiga o Ethernet descriptors in DRAM o DRAM SW cache-coherency o Checksum offload enabled o Loading network interface ** egiga_init_module (10) eth0 Intergrated Sata device found scsi0 Marvell SCSI to SATA adapter scsi1 Marvell SCSI to SATA adapter Vendor Seagate Model ST380815AS Rev 3.AA Type Direct-Access ANSI SCSI revision 03 SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back SCSI device sda 156301488 512-byte hdwr sectors (80026 MB) SCSI device sda drive cache write back sda sda1 sda2 sda3 sda4 Attached scsi disk sda at scsi0, channel 0, id 0, lun 0 Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0 physmap flash device 400000 at ff800000 Found SST 39LF020 phys_mapped_flash Found 1 x8 devices at 0x0 in 8-bit bank number of JEDEC chips 1 cfi_cmdset_0002 Disabling erase-suspend-program due to code brokenness. RedBoot partition parsing not available NAND device Manufacturer ID 0x20, Chip ID 0xda (ST Micro NAND 256MiB 3,3V 8-bit) Scanning device for bad blocks Using static partition definition Creating 3 MTD partitions on "nand_mtd" 0x00000000-0x00400000 "uImage" 0x00400000-0x04400000 "rootfs" 0x04400000-0x10000000 "extra" usbmon debugs is not available ehci_platform ehci_platform.4523 EHCI Host Controller ehci_platform ehci_platform.4523 new USB bus registered, assigned bus number 1 ehci_platform ehci_platform.4523 irq 17, io mem 0x00000000 ehci_platform ehci_platform.4523 park 0 ehci_platform ehci_platform.4523 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 1-0 1.0 USB hub found hub 1-0 1.0 1 port detected ehci_platform ehci_platform.16781 EHCI Host Controller ehci_platform ehci_platform.16781 new USB bus registered, assigned bus number 2 ehci_platform ehci_platform.16781 irq 12, io mem 0x00000000 ehci_platform ehci_platform.16781 park 0 ehci_platform ehci_platform.16781 USB 0.0 initialized, EHCI 1.00, driver 10 Dec 2004 hub 2-0 1.0 USB hub found hub 2-0 1.0 1 port detected USB Universal Host Controller Interface driver v2.2 Initializing USB Mass Storage driver... usbcore registered new driver usb-storage USB Mass Storage support registered. usbcore registered new driver usbhid drivers/usb/input/hid-core.c v2.01 USB HID core driver mice PS/2 mouse device common for all mice md raid0 personality registered as nr 2 md raid1 personality registered as nr 3 md raid5 personality registered as nr 4 raid5 measuring checksumming speed arm4regs 304.000 MB/sec 8regs 215.200 MB/sec 32regs 249.200 MB/sec raid5 using function arm4regs (304.000 MB/sec) md md driver 0.90.1 MAX_MD_DEVS=256, MD_SB_DISKS=27 Buffalo Platform Linux Driver(Light) 0.01 installed. MICON ctrl (C) BUFFALO INC. V.1.00 installed. Kernel event proc (C) BUFFALO INC. V.1.00 installed. MICON V2 (C) BUFFALO INC. V.1.00 installed. NET Registered protocol family 2 IP routing cache hash table of 1024 buckets, 8Kbytes TCP established hash table entries 8192 (order 4, 65536 bytes) TCP bind hash table entries 8192 (order 3, 32768 bytes) TCP Hash tables configured (established 8192 bind 8192) NET Registered protocol family 1 NET Registered protocol family 17 md Autodetecting RAID arrays. md autorun ... md ... autorun DONE. XFS mounting filesystem sda2 VFS Mounted root (xfs filesystem). Freeing init memory 112K init started BusyBox v1.1.1 (2006.11.29-02 37+0000) multi-call binary Starting pid 223, console /dev/ttyS0 /etc/init.d/rcS --- rcStart (hddroot) --- ===== Starting checkroot.sh ===== grep /proc/mtd No such file or directory grep /proc/mtd No such file or directory grep /proc/mtd No such file or directory chown unknown group name rpcuser grep /proc/buffalo/firmware No such file or directory rm /var/lock/perfmon is a directory rm /var/lock/printing is a directory rm /var/lock/subsys is a directory [Success] ===== Starting MountSystemFolders ===== [Success] Setting up swapspace version 1, size = 139825152 bytes Adding 136544k swap on /dev/sda3. Priority -1 extents 1 ===== Starting Kevent.sh ===== [Success] ===== Starting mount_share.sh ===== Mounting /dev/sda4 on /home as a xfs file system. XFS mounting filesystem sda4 Starting XFS recovery on filesystem sda4 (dev sda4) Ending XFS recovery on filesystem sda4 (dev sda4) Success. Mounting /dev/mtd3 on /mnt/mtd as a jffs2 file system. mount mount point /mnt/mtd does not exist Failed. [Failed ] ===== Starting sethostname.sh ===== hostname is setted to KUROBOX-PRO [Success] ===== Starting networking.sh ===== create network files.. IP=[dhcp], netmask=[], dgw=[], dns1=[], dns2=[] killall dhcpcd no process killed route SIOC[ADD|DEL]RT No such process Configuration network interface lo eth0 requesting DHCP tout=30[s] eth0 link down eth0 link up 5 , full duplex 5 , speed 100 Mbps 5 hostname is setted to KUROBOX-PRO [Success] ===== Starting smb.sh ===== $Starting SMB services $Starting NMB services [Success] ===== Starting FanController.sh ===== [Success] ===== Starting bootcomplete.sh ===== [Success] Starting pid 613, console /dev/ttyS0 /sbin/getty KUROUTOSHIKOU KUROBOX Series KUROBOX-PRO login